package com.ruoyi.system.service.wx.pay.impl;

import java.util.Date;
import java.util.List;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.CustomId;
import com.ruoyi.system.domain.wx.pay.WxPayInfo;
import com.ruoyi.system.domain.wx.pay.WxPayUserType;
import com.ruoyi.system.mapper.wx.pay.WxPayUserTypeMapper;
import com.ruoyi.system.service.wx.pay.IWxPayUserTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 用户支付常用类型Service业务层处理
 *
 * @author mic
 * @date 2023-08-29
 */
@Service
public class WxPayUserTypeServiceImpl implements IWxPayUserTypeService {
    @Autowired
    private WxPayUserTypeMapper wxPayUserTypeMapper;

    /**
     * 查询用户支付常用类型
     *
     * @param id 用户支付常用类型主键
     * @return 用户支付常用类型
     */
    @Override
    public WxPayUserType selectWxPayUserTypeById(String id) {
        return wxPayUserTypeMapper.selectWxPayUserTypeById(id);
    }

    /**
     * 查询用户支付常用类型列表
     *
     * @param wxPayUserType 用户支付常用类型
     * @return 用户支付常用类型
     */
    @Override
    public List<WxPayUserType> selectWxPayUserTypeList(WxPayUserType wxPayUserType) {
        List<WxPayUserType> wxPayUserTypes = wxPayUserTypeMapper.selectWxPayUserTypeList(wxPayUserType);
        return wxPayUserTypeMapper.selectWxPayUserTypeList(wxPayUserType);
    }

    /**
     * 新增用户支付常用类型
     *
     * @param wxPayUserType 用户支付常用类型
     * @return 结果
     */
    @Override
    public int insertWxPayUserType(WxPayUserType wxPayUserType) {
        wxPayUserType.setCreateTime(DateUtils.getNowDate());
        return wxPayUserTypeMapper.insertWxPayUserType(wxPayUserType);
    }

    /**
     * 修改用户支付常用类型
     *
     * @param wxPayUserType 用户支付常用类型
     * @return 结果
     */
    @Override
    public int updateWxPayUserType(WxPayUserType wxPayUserType) {
        wxPayUserType.setUpdateTime(DateUtils.getNowDate());
        return wxPayUserTypeMapper.updateWxPayUserType(wxPayUserType);
    }

    /**
     * 批量删除用户支付常用类型
     *
     * @param ids 需要删除的用户支付常用类型主键
     * @return 结果
     */
    @Override
    public int deleteWxPayUserTypeByIds(String[] ids) {
        return wxPayUserTypeMapper.deleteWxPayUserTypeByIds(ids);
    }

    /**
     * 删除用户支付常用类型信息
     *
     * @param id 用户支付常用类型主键
     * @return 结果
     */
    @Override
    public int deleteWxPayUserTypeById(String id) {
        return wxPayUserTypeMapper.deleteWxPayUserTypeById(id);
    }

    /**
     * 根据支付实体, 处理常用类型
     */
    @Override
    public void updateCategoryByInfo(WxPayInfo newInfo, WxPayInfo oldInfo) {
        if (oldInfo != null && StringUtils.isNotBlank(oldInfo.getPayId())) {
            // oldInfo类型次数 -1
            WxPayUserType payUserType = new WxPayUserType();
            payUserType.setCreateBy(oldInfo.getCreateBy());
            payUserType.setTypeId(oldInfo.getPrimaryType());
            List<WxPayUserType> list = wxPayUserTypeMapper.selectWxPayUserTypeList(payUserType);
            if (list != null && list.size() > 0) {
                // 根据用户和类型找到已存在的常用类型
                list.get(0).setFrequency(list.get(0).getFrequency() - 1);
                wxPayUserTypeMapper.updateWxPayUserType(list.get(0));
            }
        }
        if (newInfo != null && StringUtils.isNotBlank(newInfo.getPayId())) {
            // newinfo类型次数 +1
            WxPayUserType payUserType = new WxPayUserType();
            payUserType.setCreateBy(newInfo.getCreateBy());
            payUserType.setTypeId(newInfo.getPrimaryType());
            List<WxPayUserType> list = wxPayUserTypeMapper.selectWxPayUserTypeList(payUserType);
            if (list != null && list.size() > 0) {
                // 次数+1
                list.get(0).setFrequency(list.get(0).getFrequency() + 1);
                list.get(0).setUpdateTime(new Date());
                wxPayUserTypeMapper.updateWxPayUserType(list.get(0));
            } else {
                // 新增常用类型
                WxPayUserType type = new WxPayUserType();
                type.setId("up" + CustomId.timestamp());
                type.setTypeId(newInfo.getPrimaryType());
                type.setCreateBy(newInfo.getCreateBy());
                type.setUpdateTime(new Date());
                type.setFrequency(1);
                type.setCreateTime(new Date());
                wxPayUserTypeMapper.insertWxPayUserType(type);
            }
        }
    }
}
